package services

import (
	"encoding/json"
	"fmt"

	"github.com/sirupsen/logrus"
)

/*
//45	startTime1	//	开启时间1   小时（1字节）
//46		//	开启时间1   分钟（1字节）
//47	endTime1	//	关闭时间1   小时（1字节）
//48		//	关闭时间1   分钟（1字节）
//49	sprayDuration1	//	喷淋时间1    小时（1字节）
//50		//	喷淋时间1    分钟（1字节）
//51		//	喷淋时间1    秒（1字节）
//52	intervalTime1	//	间隔时间1   小时（1字节）
//53		//	间隔时间1    分钟（1字节）
//54		//	间隔时间1    秒（1字节）
//55	sprayLevel1	//	喷淋档位1    档（1字节）
//56	particleSize1	//	颗粒粗细1      %（1字节）
//57	weekSwitch1	//	星期开关1     1字节8个位，1~7位分别代表星期一到星期日
//58	timePeriod1Allowed	//	时间段1允许   0代表本段时间禁止  1代表本段时间允许
//59	startTime2	//	开启时间2   小时（1字节）
//60		//	开启时间2  分钟（1字节）
//61	endTime2	//	关闭时间2   小时（1字节）
//62		//	关闭时间2   分钟（1字节）
//63	sprayDuration2	//	喷淋时间2    小时（1字节）
//64		//	喷淋时间2    分钟（1字节）
//65		//	喷淋时间2   秒（1字节）
//66	intervalTime2	//	间隔时间2   小时（1字节）
//67		//	间隔时间2    分钟（1字节）
//68		//	间隔时间2    秒（1字节）
//69	sprayLevel2	//	喷淋档位2    档（1字节）
//70	particleSize2	//	颗粒粗细2      %（1字节）
//71	weekSwitch2	//	星期开关2     1字节8个位，1~7位分别代表星期一到星期日
//72	timePeriod2Allowed	//	时间段2允许   0代表本段时间禁止  1代表本段时间允许
//73	startTime3	//	开启时间3  小时（1字节）
//74		//	开启时间3  分钟（1字节）
//75	endTime3	//	关闭时间3   小时（1字节）
//76		//	关闭时间3   分钟（1字节）
//77	sprayDuration3	//	喷淋时间3    小时（1字节）
//78		//	喷淋时间3    分钟（1字节）
//79		//	喷淋时间3   秒（1字节）
//80	intervalTime3	//	间隔时间3   小时（1字节）
//81		//	间隔时间3    分钟（1字节）
//82		//	间隔时间3    秒（1字节）
//83	sprayLevel3	//	喷淋档位3    档（1字节）
//84	particleSize3	//	颗粒粗细3      %（1字节）
//85	weekSwitch3	//	星期开关3     1字节8个位，1~7位分别代表星期一到星期日
//86	timePeriod3Allowed	//	时间段3允许   0代表本段时间禁止  1代表本段时间允许
//87	autoMode	//	自动模式
//88	autoHumidityMin	//	自动模式湿度下限
//89	autoHumidityMax	//	自动模式湿度上限
//90	minInterval	//	最小间歇时间
//91	compHumidityMin	//	补偿模式湿度下限
//92	compHumidityMax	//	补偿模式湿度上限
//93	compModeSwitch	//	补偿模式开关
//94	firstCurrentThresh	//	第一电流阀值
//95	secondCurrentThresh	//	第二电流阀值
//96	solenoidMode	//	电磁阀工作模式
//97	intelliMode	//	智能工作模式 0 传感器  1 跟随电气
//98	compCoeff		补偿系数
*/
//解析喷淋控制时间1：SPK_CTRL_T1
func (d *DeviceData) ParseSpkCtrlT1Data() error {
	// 校验数据长度
	if len(d.RegisterData) < 48 {
		return fmt.Errorf("payload:%v data length is invalid", d.RegisterData)
	}
	// SPK_CTRL_T1是设备事件数据
	spkCtrlT1Params := SpkCtrlT1Params{
		StartTime1:          fmt.Sprintf("%d|%d", d.RegisterData[0], d.RegisterData[1]),                       // 开启时间1
		EndTime1:            fmt.Sprintf("%d|%d", d.RegisterData[2], d.RegisterData[3]),                       // 关闭时间1
		SprayDuration1:      fmt.Sprintf("%d|%d|%d", d.RegisterData[4], d.RegisterData[5], d.RegisterData[6]), // 喷淋时间1
		IntervalTime1:       fmt.Sprintf("%d|%d|%d", d.RegisterData[7], d.RegisterData[8], d.RegisterData[9]), // 间隔时间1
		SprayLevel1:         d.RegisterData[10],
		ParticleSize1:       d.RegisterData[11],
		WeekSwitch1:         d.RegisterData[12],
		TimePeriod1Allowed:  d.RegisterData[13],
		StartTime2:          fmt.Sprintf("%d|%d", d.RegisterData[14], d.RegisterData[15]),
		EndTime2:            fmt.Sprintf("%d|%d", d.RegisterData[16], d.RegisterData[17]),
		SprayDuration2:      fmt.Sprintf("%d|%d|%d", d.RegisterData[18], d.RegisterData[19], d.RegisterData[20]),
		IntervalTime2:       fmt.Sprintf("%d|%d|%d", d.RegisterData[21], d.RegisterData[22], d.RegisterData[23]),
		SprayLevel2:         d.RegisterData[24],
		ParticleSize2:       d.RegisterData[25],
		WeekSwitch2:         d.RegisterData[26],
		TimePeriod2Allowed:  d.RegisterData[27],
		StartTime3:          fmt.Sprintf("%d|%d", d.RegisterData[28], d.RegisterData[29]),
		EndTime3:            fmt.Sprintf("%d|%d", d.RegisterData[30], d.RegisterData[31]),
		SprayDuration3:      fmt.Sprintf("%d|%d|%d", d.RegisterData[32], d.RegisterData[33], d.RegisterData[34]),
		IntervalTime3:       fmt.Sprintf("%d|%d|%d", d.RegisterData[35], d.RegisterData[36], d.RegisterData[37]),
		SprayLevel3:         d.RegisterData[38],
		ParticleSize3:       d.RegisterData[39],
		WeekSwitch3:         d.RegisterData[40],
		TimePeriod3Allowed:  d.RegisterData[41],
		AutoMode:            d.RegisterData[42],
		AutoHumidityMin:     d.RegisterData[43],
		AutoHumidityMax:     d.RegisterData[44],
		MinInterval:         d.RegisterData[45],
		CompHumidityMin:     d.RegisterData[46],
		CompHumidityMax:     d.RegisterData[47],
		CompModeSwitch:      d.RegisterData[48],
		FirstCurrentThresh:  d.RegisterData[49],
		SecondCurrentThresh: d.RegisterData[50],
		SolenoidMode:        d.RegisterData[51],
		IntelliMode:         d.RegisterData[52],
		CompCoeff:           d.RegisterData[53],
	}

	spkCtrlT1Event := SpkCtrlT1Event{
		Method: PayloadTypeMap[45],
		Params: spkCtrlT1Params,
	}
	logrus.Info("spkCtrlT1Event:", spkCtrlT1Event)
	//spkCtrlT1Event转json
	payload, err := json.Marshal(spkCtrlT1Event)
	if err != nil {
		return err
	}
	// 发送数据到平台
	err = PublishEvent(d.Mac, payload)
	if err != nil {
		return err
	}

	return nil
}
